// 装饰器函数，它的第一个参数是目标类
function classDecorator(target) {
	console.log(target)
	target.hasDecorator = true
	return target
}

// 具体的参数意义，在下个小节，这里大家先感知一下操作
function funcDecorator(target, name, descriptor) {
	console.log(target)
	console.log(name)
	console.log(descriptor)
	let originalMethod = descriptor.value
	descriptor.value = function() {
		console.log('我是Func的装饰器逻辑')
		return originalMethod.apply(this, arguments)
	}
	console.log(originalMethod)
	console.log(descriptor)
	return descriptor
}

@classDecorator
class Button {
	@funcDecorator
	onClick() {
		console.log('我是Func的原有逻辑')
	}
}
console.log('Button 是否被装饰了：', Button.hasDecorator)
// 验证装饰器是否生效
const button = new Button()
button.onClick()
